package com.cy;

import com.sun.javafx.collections.MappingChange;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map集合
 * 	--1，概述
 * 		是接口，和Collection没有继承实现的关系。
 * 		数据是一对儿一对儿出现的。必须同时指定这组数据的K，V
 * 		K是键，V是值。其中，K不能重复.V可以重复
 * 		K--key ，V--value
 * 		也可以用泛型约束K的类型和V的类型
 * 	--2，常用方法
 * 		void clear()
 *           从此映射中移除所有映射关系（可选操作）。
 * 		 boolean containsKey(Object key)
 * 		          如果此映射包含指定键的映射关系，则返回 true。
 * 		 boolean containsValue(Object value)
 * 		          如果此映射将一个或多个键映射到指定值，则返回 true。
 * 		 Set<Map.Entry<K,V>> entrySet()
 * 		          返回此映射中包含的映射关系的 Set 视图。
 * 		 boolean equals(Object o)
 * 		          比较指定的对象与此映射是否相等。
 * 		 V get(Object key)
 * 		          返回指定键所映射的值；如果此映射不包含该键的映射关系，则返回 null。
 * 		 int hashCode()
 * 		          返回此映射的哈希码值。
 * 		 boolean isEmpty()
 * 		          如果此映射未包含键-值映射关系，则返回 true。
 * 		 Set<K> keySet()
 * 		          返回此映射中包含的键的 Set 视图。
 * 		 V put(K key, V value)
 * 		          将指定的值与此映射中的指定键关联（可选操作）。
 * 		 void putAll(Map<? extends K,? extends V> m)
 * 		          从指定映射中将所有映射关系复制到此映射中（可选操作）。
 * 		 V remove(Object key)
 * 		          如果存在一个键的映射关系，则将其从此映射中移除（可选操作）。
 * 		 int size()
 * 		          返回此映射中的键-值映射关系数。
 * 		 Collection<V> values()
 * 		          返回此映射中包含的值的 Collection 视图。
 */
public class Test8 {
    public static void main(String[] args) {

        HashMap<Integer,String>map =new HashMap<>();

        map.put(1,"张三");
        map.put(2,"李四");
        map.put(1,"王五");
        map.put(3,"老六");
        map.put(3,"老其");
        System.out.println(map);//{1=王五, 2=李四, 3=老其}

        System.out.println(map.containsKey(1));//判断是否包含1的key
        System.out.println(map.containsValue("王五"));//判断是否包含"王五"的value
        System.out.println(map.equals("王五"));//判断是否相等

        System.out.println(map.get(1));//根据key获取value
        System.out.println(map.hashCode());//获取哈希码值
        System.out.println(map.isEmpty());//判断是否为空
        System.out.println(map.size());//获取map的长度
        System.out.println(map.remove(1));//根据key删除记录

        System.out.println(map);//{2=李四, 3=老其}

        //迭代Map集合里的数据 {2=李四, 3=老其}
        //方式1：：Set<K> keySet()--把所有key获取到并存入set
        Set<Integer> keys =map.keySet();
        for(Integer k : keys){
            String v =map.get(k);
            System.out.println(v);
            System.out.println(k+"..."+v);
        }

        //方式3：：Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<Integer,String>> entrys =map.entrySet();
         for(Map.Entry<Integer,String> entry :entrys){
              Integer k =entry.getKey();
              String v=entry.getValue();
             System.out.println(k+v);
         }
        // method();
         method2();

    }

    private static void method2() {
        HashMap<Integer,String> map = new HashMap();
        map.put(1,"jack");
        map.put(2,"rose");
        map.put(3,"tony");
        map.put(2,"tommy");
        System.out.println(map);

    }

    private static void method() {
      HashMap <Integer,String> map=new HashMap<>();
      map.put(1,"jack");
      map.put(2,"jony");
        System.out.println(map);
        Set <Map.Entry<Integer,String>>  entrys = map.entrySet();
        for(Map.Entry<Integer,String> entry:entrys){
            Integer k=entry.getKey();
            String v =entry.getValue();
            System.out.println(k+v);
        }


    }
}
